package io.lvdaxian.mybatis04.type;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * 这是 类型别名的注册器
 *
 * @author lihh
 */
public class TypeAliasRegistry {
  private final Map<String, Class<?>> TYPE_ALIASES = new HashMap<>();
  
  public TypeAliasRegistry() {
    registerAlias("string", String.class);
    
    registerAlias("byte", Byte.class);
    registerAlias("long", Long.class);
    registerAlias("short", Short.class);
    registerAlias("int", Integer.class);
    registerAlias("integer", Integer.class);
    registerAlias("double", Double.class);
    registerAlias("float", Float.class);
    registerAlias("boolean", Boolean.class);
  }
  
  /**
   * 注册 别名的方法
   *
   * @param alias 别名
   * @param value 以及别名对应的 Class
   * @author lihh
   */
  public void registerAlias(String alias, Class<?> value) {
    String key = alias.toLowerCase(Locale.ENGLISH);
    TYPE_ALIASES.put(key, value);
  }
  
  /**
   * 解析 别名
   *
   * @param alias 别名
   * @param <T>   泛型类型
   * @return 返回别名对应的类
   * @author lihh
   */
  public <T> Class<T> resolveAlias(String alias) {
    String key = alias.toLowerCase(Locale.ENGLISH);
    return (Class<T>) TYPE_ALIASES.get(key);
  }
}
